package com.lzh.java1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.junit.Test;

/*
 * try-catch-finally
 * 
 * 
 * 1.finally是可选的
 * 
 * 2.finally中声明的是一定会执行的代码。即使catach中又出现异常了，try中有return语句，catch中有
 * 	 return语句等情况。
 * 
 * 3.像数据库连接、输入输出流、网络编程Socket等资源，JVM是不能自动的回收的，我们需要自己动手的进行
 * 	 资源的释放。此时的资源释放，就需要声明在finally中。
 * 
 */
public class FinallyTest {
	
	@Test
	public void test3() {
		FileInputStream fis = null;
			try {
				File file = new File("hello1.txt");
				fis = new FileInputStream(file);
				
				int data = fis.read();
				while(data != -1) {
					System.out.print((char)data);
					data = fis.read();
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}finally {
				try {
					if(fis != null)
						fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		
	}
	
	@Test
	public  void test2() {
		int num = method();
		System.out.println(num);
	}
	
	public int method() {
		try {
//			int[] arr = new int[10];
			//System.out.println(arr[10]);
			return 1;
		}catch(ArrayIndexOutOfBoundsException e) {
			e.printStackTrace();
			return 2;
		}finally {
			System.out.println("一定会执行");
		}
	}
	
	
	@Test
	public void test1() {
		try {
			int a = 10;
			int b = 0;
			System.out.println(a / b);
			
		}catch(ArithmeticException e) {
			e.printStackTrace();
			
//			int[] arr = new int[10];
//			System.out.println(arr[10]);
			
		}finally {
			System.out.println("我好帅啊！！！！！！！！！");
		}
	
		
	}
}
